NAME

fineprnt — fine printing on an hp+ or compatible laser printer

SYNOPSIS

fineprnt options filenames

DESCRIPTION

Fineprnt prints ascii or binary files in a column oriented manner on an hp+ or compatible laser printer. It uses a small 6pt fixed or proportionally spaced font downloaded before printing. The printout can be tuned to any paper size, portrait or landscape mode. Double sided printing is supported with page layout adjusted to odd (right hand side) and even (left hand side) pages. It is typically used to print program listings, readme files and the like in a very compressed form.

Fineprnt is a stand-alone program but supports an environment variable and an optional configuration file.

OPTIONS

Options and filenames (which can contain wildcards) can be given in any order, however, all options are processed before printing starts, and all files are printed with the same setting. Options must be separated by spaces. In the following list, # stands for an integer number, ? for a single character and * for a string of characters. Defaults, given in parentheses, are adjusted for standard A4 paper in portrait mode. The values for some length parameters are in dots, one dot being ${\frac{{1}}{{300}}}$inch, the resolution of the hp+ printer.

Note that the area of print does not usually coincide with the physical size of the paper. The margin parameters, therefore, do not necessarily count from the borders of the sheet.

Before printing all files are scanned to determine the number of columns and lines for each file and to search for lines that may have to be truncated.

-c#
Number of characters per line (80). This parameter controls the width of each column. When the proportional font is selected the actual number of characters printed can be more or less, depending on the total width being less or more of that what the fixed spacing font would produce.

-l#
Number of lines per column (132). This parameter controls the page length.

-s#
Number of columns per page (2).

-o#
Left margin in dots (175) on all pages in single sided mode, or on odd sides in 2-sided mode.

-e#
Left margin in dots (0) on even sides in 2-sided mode. If landscape mode and 2-sided printing is specified, this parameter applies to the upper margin on even sides.

-u#
Upper margin in dots (0). If landscape mode and 2-sided printing is specified, this parameter applies to the upper margin on odd sides only.

-b#
Baselineskip in dots (24). A value less than 24 is not recommended. A larger value might yield a slightly better readability, but at the cost of less lines fiting on the page.

-a#
First page to print (1).

-z#
Last page to print (last page of this print job).

-t#
Set tab stops every # characters (8).

-w#
Wrap option for lines longer than the column width:
1
Wrap lines.
0
Truncate lines (the default).
-1
Continue printing beyond the column width.
-f#
Frame around each column:
0
No frame.
1
Vertical lines as separator between columns only.
2
Horizontal lines above and below each column.
3
A box around each column (the default).

-h#
Header and footer for each column:
0
No header or footer.
1
Print filename as header only.
2
Print column number as footer only.
3
Filename as header, column number as footer.
4
As above, plus information on file modification and the total number of columns for this file (the default).

-n#
Option for line numbering. If a positive number is specified lines are numbered consecutively, starting from 0 for each file, incremented by the given number. Note that column 2 and higher are shifted a further 4 character spaces each to the right to accommodate room for the line numbers. If a negative number is given, only the innermost column of each page is numbered, starting from 0 on each page and incremented by the absolute value of the given number. Column alignment is not changed in this case.

The default is 0, no line numbering.

-#[e/o]
Specify one/two-sided or no printing:
-2
2-sided printing, odd sides first, prompt to print even sides
-2e
2-sided, even sides only (off)
-2o
2-sided, odd sides only (off)
-1e
1-sided, but margins as for even sides
-1o
1-sided, margins as for odd sides, same as -1 (default)
-0
don't actually print, find number of columns for each file only.

-B?[.]
Dump bytes instead of ascii interpretation. The character following the -B indicates: X=HEX, x=hex, o=octal or b=binary representation. Any other or no character defaults to ascii interpretation. An optional period (.) changes any zeros in the print into periods, which may improve readability in some circumstances.

-P*
direct output:
If a single digit is given after the -P it specifies the printer port, the default is 1.
For any other string following -P the output is redirected (append mode) into a file named by the given string.

-F?
Select font, f = fixed, p = proportional, default is f.

-O?
Page orientation, p = portrait, l = landscape (p).

-N?
To start a new file, advance
l
5 lines
h
to next half column
c
to next column
p
to a new page
s
to a new sheet
x
variable: if the next file fits in the same column (including 5 empty separation lines), it is printed there. Otherwise, the current column is ended, and if the new file entirely fits in one column, it is printed in the next one. If it exeeds one column, printing starts on a fresh page. If it exeeds on page printing starts on a new sheet (which is only different from a new page if 2-sided printing is active and the last file ended on an odd page).

-D*
Directory containing fineprnt.cfg (.).

-E*
Disregard any characters between a form-feed and the next newline character: -Eon switches this feature on. Any other string following -E means off (default is off).

-Z*
Recognise ctrl-Z as file terminator. -Zon activates this feature, any other string after -Z means off (default is off).

USER-DEFINED OPTIONS

When an option is not found under those listed above, a file fineprnt.cfg is searched (see under FILES) and scanned for a line whose first word (a string followed by one or more blank spaces) matches that option (stripped of the introducing character - or /). If a match is found, the rest of that line is parsed for options, just like command line options or the value of the environmental variable, with the only difference that nesting is not possible. Note that the name of a user-defined option cannot start with one of the 8 upper case letters B, D, E, F, N, O, P or Z. It can start with any lower case letter, but if it is one of a, b, c, e, f, h, l, n, o, s, t, u, w, or z, the second character must not be a digit, - or +.

This feature is thought to provide a convenient way to abbreviate a set of options to customise the program to individual taste or printer set-ups. An example: If fineprnt.cfg exists and contains the following line

quer -Ol -l88 -u27 -s3 -2 -o85
typing
fineprnt -quer myfile
will print myfile in landscape mode, with 88 lines per column, 3 columns per page, etc.

ENVIRONMENT

FINEPRNT — a list of options processed before (and overridden by) command line options. The environment variable is optional.

FILES

finepnrt.cfg — an optional ascii file containing sets of user-defined options. If the -D option is not specified, the file is first searched in the current directory and than in the directory containing fineprnt.exe. The file need not exist.

FYI

In ascii mode formfeed characters act as a vertical tab of half a column distance: If the current column is less than half filled, printing continues at line ${\frac{{l}}{{2}}}$ + 1, where l is the number of lines per column. If the current column is more than half filled, printing continues in the next column.

Backspace characters are sometimes used to simulate bold printing on dot-matrix printers. This has no effect, however, on a laser printer. To follow the dot-matrix printer convention char–̱char sequences are rendered by shifting the second printed character one dot to the right and upwards which gives the appearance of a bolder stroke width.

The characters of the fixed spacing font have a width of 13 dots. The total print width (in inch) is (for fixed as well as proportional mode)

$\displaystyle {\frac{{13}}{{300}}}$(s(c + 3) - 1) for n≤0
$\displaystyle {\frac{{13}}{{300}}}$(s(c + 7) - 1) for n > 0

where c is the number of characters per column, s is the number of columns per page and n the value of the -n parameter. If -w-1 is specified this width may be exeeded by long lines.

The maximum length of one column is (counted from the upper end of the area of print)

$\displaystyle {\frac{{u + b (l+1)+12}}{{300}}}$ inch,

where u is the topmargin, l the number of lines per column, and b the baselineskip.

RESTRICTIONS

Only standard printable ascii characters can be handled. Unfortunately IBM and HP implemented different sets of extended characters, requiring a remapping. Extended characters are on the list of things to do. I might tackle this after my return to Europe.

LIMITATIONS

The maximum number of charaters per line is 511. The maximum length of a command line is 128 characters. The number of files to be printed is only limited by the amount of memory available to store their names.

The total number of characters on a normal A4 page can be 20,000 or more. A page with little white space (as it may occur when using the -B option) can exhaust the printer's memory, which results in a page too complex error on the printer. Apart from adding memory to the printer, the only remedy is to reduce the number of total characters per page using the -c, -l, or -s options.

CAVEATS

The program has only been tested on 8086, 80286 and 80386 processors, under DOS 3.2 and 3.3 and with the following printers: hp3, Epson GQ-3500 and Dataproducts LZR-1230, the latter two emulating an hp+. It should run under any DOS 2.0 or higher.

SHAREWARE

If you use fineprnt beyond an evaluation period, send $20 to the Trees-For-Life people, Greenpeace or any other environment protection organisation of your choice. If you don't use this program to print your ascii files, send 1 cent for each page you print to Trees-For-Life anyway. Fineprnt is free if used to print on recycled paper. If you don't comply with this rules, you must plant one tree for each 50 pages you print.

AUTHOR

Jörg Hartmann

FIAMS, Flinders University of South Australia, Bedford Park SA 5042.
e-mail: mojh@research.cc.flinders.edu.au


I will be leaving Australia in early March 1991, and from April 1991 I will be at

Alfred Wegener Institut für Polar- und Meeresforschung
Columbusstraße, 2850 Bremerhaven, Germany.
e-mail: postmaster@vax.awi-bremerhaven.dbp.de

Copyright © 1990, 1991 Jörg Hartmann.